package cliente;

import interfaz.InterfazNegocio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.rmi.Naming;
import java.rmi.RemoteException;
import bean.*;

public class BDelegate {

	private static final long serialVersionUID = 1L;
	private InterfazNegocio modelo;

	public BDelegate() throws RemoteException {
		super();
		getConexion();
	}

	public void getConexion() {

		try {
			modelo = (InterfazNegocio) Naming
					.lookup("//127.0.0.1/InterfaceNegocio");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public InterfazNegocio getModelo() {

		return modelo;

	}

	// ///////////////////////////////////////////////////////////////////////////////////////////
	// GESTION OFICINAS
	// //////////////////////////////////////////////////////////////////////////////////////////
	// Clientes

	public ClienteVO buscarCliente(ClienteVO c) {
		ClienteVO salida = null;
		try {
			salida = modelo.obtenerCliente(c);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
	
	public RodamientoVO buscarRodamiento(RodamientoVO rodamientoVO) 
	{
		RodamientoVO salida = null;
		try {
			salida = modelo.obtenerRodamiento(rodamientoVO);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	public void guardarCliente(ClienteVO c) {
		try {
			modelo.guardarCliente(c);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public void eliminarCliente(ClienteVO c) {
		try {
			modelo.eliminarCliente(c);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public void actualizarCliente(ClienteVO c) {
		try {
			modelo.actualizarCliente(c);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	

	public List<ClienteVO> obtenerClientes(OficinaDeVentaVO o) {
		List<ClienteVO> salida = new ArrayList<ClienteVO>();
		try {
			salida = modelo.obtenerClientes(o);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	// Facturas
	/*
	public FacturaVO generarFactura(PedidoVO p) {
		FacturaVO salida = null;
		try {
			salida = modelo.generarFactura(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}*/

	public FacturaVO buscarFactura(FacturaVO f) {

		FacturaVO salida = null;
		try {
			salida = modelo.obtenerFactura(f);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	// Venta

	public String solicitarVenta(String solicitudVentaXML) {

		String salida = " ";
		try {
			salida = modelo.solicitarVenta(solicitudVentaXML);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
	
	public String aceptarCotizacion(int nroCotizacion, boolean aceptado){
	String salida = " ";
	try {
		salida = modelo.aceptarCotizacion(nroCotizacion, aceptado );
	} catch (RemoteException e) {
		e.printStackTrace();
	}
	return salida;
}
	
/*
	public RemitoVO solicitarVenta(PedidoVO pedido) {

		RemitoVO salida = null;
		try {
			salida = modelo.solicitarVenta(pedido);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;

	} */

	// Cotizacion
	public String solicitarCotizacion(String solicitudCotizacionXML) {
		String salida = null;
		try {
			salida = modelo.solicitarCotizacion(solicitudCotizacionXML);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	public CotizacionVO solicitarCotizacion2(String solicitudCotizacionXML) {

		CotizacionVO salida = null;
		try {
			salida = modelo.solicitarCotizacion2(solicitudCotizacionXML);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	/* Comparativa*/
	
	public List<Object[]> obtenerComparativa(String codigo, String caract, String marca, String origen){
	 
		List<Object[]> salida = new ArrayList<Object[]>();
		try {
			salida = modelo.obtenerComparativa(codigo, caract, marca, origen);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
   
	public float obtenerMejorPrecio(int cant,Date fecha, String codigo, String caract, String marca, String origen){
		
		float salida = 0;
		try {
			salida = modelo.obtenerMejorPrecio(cant, fecha, codigo, caract, marca, origen);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;	
	}
	

	// Oficinas
	public List<OficinaDeVentaVO> obtenerOficinas() {
		List<OficinaDeVentaVO> salida = new ArrayList<OficinaDeVentaVO>();
		try {
			salida = modelo.obtenerListaOficinas();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	// ///////////////////////////////////////////////////////////////////////////////////////////
	// GESTION CASA CENTRAL
	// //////////////////////////////////////////////////////////////////////////////////////////

	// Oficinas
	public void guardarOficina(OficinaDeVentaVO o) {
		try {
			modelo.guardarOficina(o);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public OficinaDeVentaVO obtenerOficina(OficinaDeVentaVO o) {
		OficinaDeVentaVO salida = null;
		try {
			salida = modelo.obtenerOficina(o);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	public void eliminarOficina(OficinaDeVentaVO o) {
		try {
			modelo.eliminarOficina(o);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	// Condiciones de Pago
	public void guardarCondicionDePago(CondicionDePagoVO cp) {
		try {
			modelo.guardarCondicionDePago(cp);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public List<CondicionDePagoVO> obtenerListaCondicionesPago() {
		List<CondicionDePagoVO> salida = new ArrayList<CondicionDePagoVO>();
		try {
			salida = modelo.obtenerListaCondicionesPago();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	// Proveedores
	public ProveedorVO obtenerProveedor(ProveedorVO p) {
		ProveedorVO salida = null;
		try {
			salida = modelo.obtenerProveedor(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	public void guardarProveedor(ProveedorVO p) {
		try {
			modelo.guardarProveedor(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public void eliminarProveedor(ProveedorVO p) {
		try {
			modelo.eliminarProveedor(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public void actualizarProveedor(ProveedorVO p) {
		try {
			modelo.actualizarProveedor(p);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public List<ProveedorVO> obtenerProveedores() {
		List<ProveedorVO> salida = new ArrayList<ProveedorVO>();
		try {
			salida = modelo.obtenerProveedores();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
	
	

	// Listas de Precios
	public void cargarListaDePrecios(String archivoXML) {
		try {
			modelo.cargarListaDePrecios(archivoXML);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public ListaDePreciosVO obtenerListaDePrecios(ListaDePreciosVO l) {
		ListaDePreciosVO salida = new ListaDePreciosVO();
		try {
			salida = modelo.obtenerListaDePrecios(l);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}

	public void guardarListaDePrecios(ListaDePreciosVO l) {
		try {
			modelo.guardarListaDePrecios(l);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	// Rodamientos
	public RodamientoVO obtenerRodamiento(RodamientoVO r) {
		RodamientoVO salida = new RodamientoVO();
		
		try {
			salida= modelo.obtenerRodamiento(r);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida ;
	}

	public void guardarRodamiento(RodamientoVO r) {
		try {
			modelo.guardarRodamiento(r);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public List<RodamientoVO> obtenerRodamientos() 
	{
		List<RodamientoVO> salida = new ArrayList<RodamientoVO>();
				
		try {
			salida = modelo.obtenerRodamientos();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		return salida;
	}
	
	
	public void actualizarRodamiento(RodamientoVO rodamientoVO)
	{
		try {
			modelo.actualizarRodamiento(rodamientoVO);
		} catch (RemoteException e) {
			e.printStackTrace();
		}	
	}

	//Compras
	/*
	public RemitoVO generarCompra(Pedido pedido)
	{
		RemitoVO salida = null;
		
		try {
			salida = modelo.generarCompra(pedido);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return salida;
	}
	*/
	
	//Pedidos
	
	
	
	//Estados
	public EstadoVO obtenerEstadoVO(EstadoVO est)  {
		EstadoVO salida = new EstadoVO();
		try {
			salida = modelo.obtenerEstadoVO(est);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
	
	public void guardarEstado(EstadoVO est)  {
		try {
			modelo.guardarEstado(est);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}	
	
	public List<EstadoVO> obtenerListaEstados() {
		List<EstadoVO> salida = new ArrayList<EstadoVO>();
		try {
			salida = modelo.obtenerListaEstados();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return salida;
	}
	
	public String CargarSolicitudXMLCliente(String rutaXML) throws RemoteException
	{
        String texto = " ";
		
		texto = modelo.solicitarCotizacion(rutaXML);
		
		return texto;		
			
		
	}

}
